﻿using System;
using System.ComponentModel;
using System.Windows.Forms;
using ApplicationGenerator.CommonModule;
using ApplicationGenerator.Lists.Web;
using ApplicationGenerator.Versions.BusinessLogic;
using ApplicationGenerator.Versions.Forms;
using System.Drawing.Design;
using System.Drawing;
using System.Web.UI.WebControls;

namespace ApplicationGenerator.Forms.WebControls
{
    /// <summary>
    /// Kontrolka wyświetlająca listę na formularzu
    /// </summary>
    [ToolboxBitmap(typeof(ListView))]
    [Serializable]
    public class DisplayListControl : BaseControl, INeedParentIdControl
    {
        #region Fields
        /// <summary>
        /// Kontrolka listy
        /// </summary>
        [NonSerialized]
        private ListWebControl _listControl;

        #endregion

        #region Properties

        [Category("Rozszerzone dane")]
        [DisplayName("Lista do wyświetlenia")]
        [Description("Guid listy, która ma zostać wyświetlona przy wyborze elementów na liście.")]
        [TypeConverter(typeof(VersionConverter))]
        [Editor(typeof(VersionEditor), typeof(UITypeEditor))]
        [VersionType(VersionElement.List)]
        public VersionInfo ListVersion
        {
            get;
            set;
        }

        /// <summary>
        /// Kontrolka webowa powiązana z daną kontrolką
        /// </summary>
        [Browsable(false)]
        public override WebControl Control
        {
            get
            {
                if (_listControl == null)
                {
                    _listControl = new ListWebControl(ListVersion.Version, false);
                }

                return _listControl;
            }
        }
        #endregion

        #region IValidation Members

        /// <summary>
        /// Waliduje encję
        /// </summary>
        /// <param name="errorList">Lista błędów</param>
        /// <returns>Czy encja jest poprawna ?</returns>
        public bool IsValid(ErrorEntity errorList)
        {
            bool isValid = base.IsValid(errorList);
            if (ListVersion == null || ListVersion.Version == Guid.Empty)
            {
                errorList.ErrorStrings.Add("Należy ustawić wyświetlaną listę.");
                isValid = false;
            }

            return isValid;
        }

        #endregion

        #region INeedParentIdControl Members
        /// <summary>
        /// Id elementu nadrzędnego
        /// </summary>
        public int? ParentId
        {
            set
            {
                (Control as ListWebControl).ParentId = value;
            }
        }

        #endregion
    }
}
